import {
    createStore
} from 'vuex'
import createPersistedState from 'vuex-persistedstate'

const store = createStore({
    // ... 你的state, mutations, actions, getters  
    // state：提供唯一的公共数据源，所有共享的数据都要统一放到store中的state存储
    state() {
        return {
            access_token: uni.getStorageSync('newAsToken') || '',
            token: uni.getStorageSync('newToken') || '',
            currentTab: 1,
            cityData: {},
            homeClass: 0,
            userName: uni.getStorageSync('userName') || '登录/注册',
            userUrl: uni.getStorageSync('userUrl') || '',
            userPhone: uni.getStorageSync('userPhone') || '****',
            headerTop: '',
            siteData: {},
            indentData: {}
        }
    },
    // mutations 同步变更state数据，传多个参数需要用对象的方式
    mutations: { //.commit
        increment(state) {
            state.count += 2
            uni.setStorageSync('newCount', state.count);
        }

    },
    // getters 用于对store中的已有数据进行加工处理形成新的数据，如果store中的数据发生变化，
    getters: { //.getters
        doneTodos(state) {}
    },
    // actions 异步变更state数据
    actions: {
        increment(context) {
            context.commit('increment')
        }
    },
    // plugins: [uniStoragePlugin],
    // plugins: [
    //     createPersistedState({
    //         storage: window.localStorage, // 或者使用sessionStorage  
    //         // 可选的配置  
    //         key: 'your-app-key', // 保存到localStorage或sessionStorage的键名  
    //         // reducer: (state) => ({ /* 返回需要保存的状态 */ }),  
    //     }),
    // ],
})
const uniStoragePlugin = (store) => {
    // 初始化时从uni-app的存储中恢复状态  
    let savedState = null;
    try {
        const stateStr = uni.getStorageSync('vuex');
        if (stateStr) {
            savedState = JSON.parse(stateStr);
        }
    } catch (e) {
        // 处理错误  
    }
    if (savedState) {
        store.replaceState(savedState);
    }

    // 当状态变化时保存到uni-app的存储中  
    store.subscribe((mutation, state) => {
        uni.setStorageSync('vuex', JSON.stringify(state));
    });
};

// export default uniStoragePlugin;
export default store